package com.redepronik.negosys.invfac.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.IndexColumn;

/**
 * The persistent class for the grupo database table.
 * 
 */
@Entity
@Table(schema = "invfac", name = "grupo")
@NamedQuery(name = "Grupo.findAll", query = "SELECT g FROM Grupo g")
public class Grupo implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(allocationSize = 1, name = "GRUPO_GRUPOID_GENERATOR", sequenceName = "INVFAC.GRUPO_GRUPOID_SEQ")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GRUPO_GRUPOID_GENERATOR")
	@Column(unique = true, nullable = false)
	private Integer grupoid;

	@Column(nullable = false)
	private Boolean activo;

	@Column(nullable = false, length = 50)
	private String nombre;

	@Column(nullable = false)
	private Boolean nombrelargocorto;

	// bi-directional many-to-one association to Grupocaracteristica
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "grupo")
	@IndexColumn(name = "orden", base = 1)
	private List<Grupocaracteristica> grupocaracteristicas;

	// bi-directional many-to-one association to Producto
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "grupo")
	private List<Producto> productos;

	public Grupo() {
	}

	public Grupocaracteristica addGrupocaracteristica(
			Grupocaracteristica grupocaracteristica) {
		getGrupocaracteristicas().add(grupocaracteristica);
		grupocaracteristica.setGrupo(this);

		return grupocaracteristica;
	}

	public Producto addProducto(Producto producto) {
		getProductos().add(producto);
		producto.setGrupo(this);

		return producto;
	}

	public Boolean getActivo() {
		return this.activo;
	}

	public List<Grupocaracteristica> getGrupocaracteristicas() {
		return this.grupocaracteristicas;
	}

	public Integer getGrupoid() {
		return this.grupoid;
	}

	public String getNombre() {
		return this.nombre;
	}

	public Boolean getNombrelargocorto() {
		return this.nombrelargocorto;
	}

	public List<Producto> getProductos() {
		return this.productos;
	}

	public Grupocaracteristica removeGrupocaracteristica(
			Grupocaracteristica grupocaracteristica) {
		getGrupocaracteristicas().remove(grupocaracteristica);
		grupocaracteristica.setGrupo(null);

		return grupocaracteristica;
	}

	public Producto removeProducto(Producto producto) {
		getProductos().remove(producto);
		producto.setGrupo(null);

		return producto;
	}

	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	public void setGrupocaracteristicas(
			List<Grupocaracteristica> grupocaracteristicas) {
		this.grupocaracteristicas = grupocaracteristicas;
	}

	public void setGrupoid(Integer grupoid) {
		this.grupoid = grupoid;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setNombrelargocorto(Boolean nombrelargocorto) {
		this.nombrelargocorto = nombrelargocorto;
	}

	public void setProductos(List<Producto> productos) {
		this.productos = productos;
	}

}